Skip to content

fix(status): 补 TRANSFERRING(9) + 未知状态码退化 - #3

Merged
wangzhizhou merged 1 commit into
mainfrom
fix/server-status-transferring
Oct 24, 2026
Merged

wangzhizhou merged 1 commit into
mainfrom
fix/server-status-transferring

Conversation

@wangzhizhou

Copy link
Copy Markdown
Collaborator

fix(status): 补上 TRANSFERRING(9) 并让未知状态码退化而不是整条消息解码失败

官方状态码有 0..10(含 9 = TRANSFERRING),但 ServerStatus 枚举漏了 9。
后果不是"显示错一个值",而是:

  • WebSocket 的 status 消息 data 解码成 Server 时,枚举初始化失败 →
    整条消息抛错 → 上层收不到这次状态更新(服务器启动/停止时的迁移阶段会卡住)。

实测(真实账号,HTTP 轮询与 WS 推送对照)确认服务器会依次经过
10 PREPARING → 6 LOADING → 2 STARTING → 1 ONLINE → 3 STOPPING → 5 SAVING → 0 OFFLINE,
其中迁移阶段的状态码就是 9。

改动:

  • ServerStatus 补 case TRANSFERRING = 9;
  • 新增 case UNKNOWN = -1 与宽容的 init(from:):将来新增状态码时退化成 .UNKNOWN,
    不再让整条 Server 解码失败;
  • 新增 ServerStatusDecodingTests:11 个官方取值逐一断言 + 未知码退化用例。

上层(OrzMCApp)需要相应把 .UNKNOWN 当成过渡态展示。

官方状态码有 0..10(含 9 = TRANSFERRING),但 `ServerStatus` 枚举漏了 9。
后果不是"显示错一个值",而是:

- WebSocket 的 `status` 消息 `data` 解码成 `Server` 时,枚举初始化失败 →
  整条消息抛错 → 上层收不到这次状态更新(服务器启动/停止时的迁移阶段会卡住)。

实测(真实账号,HTTP 轮询与 WS 推送对照)确认服务器会依次经过
10 PREPARING → 6 LOADING → 2 STARTING → 1 ONLINE → 3 STOPPING → 5 SAVING → 0 OFFLINE,
其中迁移阶段的状态码就是 9。

改动:

- `ServerStatus` 补 `case TRANSFERRING = 9`;
- 新增 `case UNKNOWN = -1` 与宽容的 `init(from:)`:将来新增状态码时退化成 `.UNKNOWN`,
  不再让整条 `Server` 解码失败;
- 新增 `ServerStatusDecodingTests`:11 个官方取值逐一断言 + 未知码退化用例。

上层(OrzMCApp)需要相应把 `.UNKNOWN` 当成过渡态展示。
@wangzhizhou
wangzhizhou merged commit bd96526 into main Oct 24, 2026
1 check passed
@wangzhizhou
wangzhizhou deleted the fix/server-status-transferring branch October 24, 2026 15:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant